/*
 * BarraEstandar.java
 *
 * Created on 5 de julio de 2005, 09:20 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package ig.metrica.ui.pantallas.comunes;
//swing
import ig.util.CodigoBotones;
import javax.swing.JToolBar;
import javax.swing.ImageIcon;
import javax.swing.JButton;
//event
import java.awt.event.ActionEvent;
//this
//import com.ig.comunes.constantes.CodigoBotones;
/**
 *
 * @author Propietario
 */
public class BarraEstandar extends JToolBar{
    
    /**
     * <p>Boton nuevo, el codigo de este boton debe ser el que
     * corresponda en com.ig.costantes.CodigoBotones.nuevo</p>
     *
     */
    private BotonMenu nuevo;
    
    /**
     * <p>Boton buscar, el codigo de este boton debe ser el que
     * corresponda en com.ig.costantes.CodigoBotones.buscar</p>
     *
     */
    private BotonMenu buscar;
    
    /**
     * <p>Boton modificar, el codigo de este boton debe ser  el que
     * corresponda en com.ig.costantes.CodigoBotones.modificar</p>
     *
     */
    private BotonMenu modificar;
    
    /**
     * <p>Boton guardar, el codigo de este boton debe ser  el que
     * corresponda en com.ig.costantes.CodigoBotones.guardar</p>
     *
     */
    private BotonMenu guardar;
    
    /**
     * <p>Boton eliminar, el codigo de este boton debe ser  el que
     * corresponda en com.ig.costantes.CodigoBotones.eliminar</p>
     *
     */
    private BotonMenu eliminar;
    
    /**
     * <p>Boton salir, el codigo de este boton debe ser  el que
     * corresponda en com.ig.costantes.CodigoBotones.salir</p>
     *
     */
    private BotonMenu salir;
    
    /**
     * <p>Boton nuevo, el codigo de este boton debe ser  el que
     * corresponda en com.ig.costantes.CodigoBotones.imprimir</p>
     *
     */
    private BotonMenu imprimir;
    
    /**
     * <p>Boton nuevo, el codigo de este boton debe ser  el que
     * corresponda en com.ig.costantes.CodigoBotones.cancelar</p>
     *
     */
    private BotonMenu cancelar;
    
    private BotonMenu exportar;
    
    private BotonMenu importar;
    /**
     * <p>Numero que identifica inequivocamente cuales de los botones en la
     * barra estan activos, siempre es un multiplo de 2, o el 0</p>
     * <p>Ejemplo</p>
     * Si El codigo del boton nuevo fuera 2, el de buscar 4 tendriamos :<br/>
     * <table>
     *    <th colspan="0" rowspan="0" align="center" valign="middle" bgcolor="#C1B5B5">
     *       <td>Estado</td><td>Botones Activos</td>
     *    </th>
     *    <tr><td>2<td></td>boton nuevo</td></tr>
     *    <tr><td>4<td></td>boton buscar</td></tr>
     *    <tr><td>6<td></td>boton nuevo y bot???n buscar</td></tr>
     * </table>
     * <p>en general, los botones activos se ubican como suma de sus c???digos,
     * existen sumas predefinidas en la clase CodigoBotones  del
     * paquete com.ig.comunes.constantes.CodigoBotones</p>
     * <p>Se debe tener en cuenta que solo los botones visibles
     * pueden estar activos</p>
     *
     *
     */
    private int estado;
    
    /**
     * <p>Numero que identifica inequivocamente cuales de los botones en la
     * barra est???n activos, siempre es un m???ltiplo de 2, o el 0</p>
     * <p>Ejemplo</p>
     * Si El c???digo del bot???n nuevo fuera 2, el de buscar 4 tendriamos :<br/>
     * <table>
     *    <th colspan="0" rowspan="0" align="center" valign="middle" bgcolor="#C1B5B5">
     *       <td>visible</td><td>Botones visibles</td>
     *    </th>
     *    <tr><td>2<td></td>bot???n nuevo</td></tr>
     *    <tr><td>4<td></td>bot???n buscar</td></tr>
     *    <tr><td>6<td></td>bot???n nuevo y bot???n buscar</td></tr>
     * </table>
     * <p>en general, los botones visibles se ubican como suma de sus c???digos,
     * existen sumas predefinidas en la clase CodigoBotones  del
     * paquete com.ig.comunes.constantes.CodigoBotones</p>
     *
     *
     */
    private int visible;
    /*
     *
     *
     */
    BotonMenu[] botones = {nuevo,buscar,modificar,guardar,eliminar,salir,imprimir,cancelar, importar, exportar};
    /**
     * <p>Construye una BarraEstandar habilitando y mostrando todos los botones</p>
     *
     */
    public  BarraEstandar() {
        adicionarBotones();
        
    }
    
    /**
     * <p>Construye una BarraEstandar, Muestra todos los botones pero
     * solo habilita los botones que se incluyan en estado</p>
     *
     *
     * @param _estado Numero que identifica que botones estan habilitados en el momento de la construcci???n de la barra
     */
    public  BarraEstandar(int _estado) {
        adicionarBotones();
        setEstado(_estado);
    }
    
    /**
     * <p>Construye una BarraEstandar, Muestra solo los botones incluidos
     * en visible y solo habilita los botones que se incluyan en estado</p>
     *
     *
     * @param _estado
     * @param _visible
     */
    public  BarraEstandar(int _estado, int _visible) {
        adicionarBotones();
        setEstado(_estado);
        setVisible(_visible);
    }
    
    /**
     * <p>Numero que identifica inequivocamente cuales de los botones en la
     * barra est???n activos, siempre es un m???ltiplo de 2, o el 0</p>
     * <p>Ejemplo</p>
     * Si El c???digo del bot???n nuevo fuera 2, el de buscar 4 tendriamos :<br/>
     * <table>
     * <th colspan="0" rowspan="0" align="center" valign="middle" bgcolor="#C1B5B5">
     * <td>Estado</td><td>Botones Activos</td>
     * </th>
     * <tr><td>2<td></td>bot???n nuevo</td></tr>
     * <tr><td>4<td></td>bot???n buscar</td></tr>
     * <tr><td>6<td></td>bot???n nuevo y bot???n buscar</td></tr>
     * </table>
     * <p>en general, los botones activos se ubican como suma de sus c???digos,
     * existen sumas predefinidas en la clase CodigoBotones  del
     * paquete com.ig.comunes.constantes.CodigoBotones</p>
     * <p>Se debe tener en cuenta que solo los botones visibles
     * pueden estar activos</p>
     *
     *
     * @return
     */
    public int getEstado() {
        return estado;
    }
    
    /**
     * <p>Numero que identifica inequivocamente cuales de los botones en la
     * barra est???n activos, siempre es un m???ltiplo de 2, o el 0</p>
     * <p>Ejemplo</p>
     * Si El c???digo del bot???n nuevo fuera 2, el de buscar 4 tendriamos :<br/>
     * <table>
     * <th colspan="0" rowspan="0" align="center" valign="middle" bgcolor="#C1B5B5">
     * <td>Estado</td><td>Botones Activos</td>
     * </th>
     * <tr><td>2<td></td>bot???n nuevo</td></tr>
     * <tr><td>4<td></td>bot???n buscar</td></tr>
     * <tr><td>6<td></td>bot???n nuevo y bot???n buscar</td></tr>
     * </table>
     * <p>en general, los botones activos se ubican como suma de sus c???digos,
     * existen sumas predefinidas en la clase CodigoBotones  del
     * paquete com.ig.comunes.constantes.CodigoBotones</p>
     * <p>Se debe tener en cuenta que solo los botones visibles
     * pueden estar activos</p>
     *
     *
     * @param _estado
     */
    public void setEstado(int _estado) {
        
        estado = _estado;
        for(int z=0;z<botones.length;z++){
            botones[z].setEnabled((botones[z].getCodigo() & estado)!=0);
        }
    }
    
    /**
     * <p>Numero que identifica inequivocamente cuales de los botones en la
     * barra est???n activos, siempre es un m???ltiplo de 2, o el 0</p>
     * <p>Ejemplo</p>
     * Si El c???digo del bot???n nuevo fuera 2, el de buscar 4 tendriamos :<br/>
     * <table>
     * <th colspan="0" rowspan="0" align="center" valign="middle" bgcolor="#C1B5B5">
     * <td>visible</td><td>Botones visibles</td>
     * </th>
     * <tr><td>2<td></td>bot???n nuevo</td></tr>
     * <tr><td>4<td></td>bot???n buscar</td></tr>
     * <tr><td>6<td></td>bot???n nuevo y bot???n buscar</td></tr>
     * </table>
     * <p>en general, los botones visibles se ubican como suma de sus c???digos,
     * existen sumas predefinidas en la clase CodigoBotones  del
     * paquete com.ig.comunes.constantes.CodigoBotones</p>
     *
     *
     * @return
     */
    public int getVisible() {
        return visible;
    }
    
    /**
     * <p>Numero que identifica inequivocamente cuales de los botones en la
     * barra est???n activos, siempre es un m???ltiplo de 2, o el 0</p>
     * <p>Ejemplo</p>
     * Si El c???digo del bot???n nuevo fuera 2, el de buscar 4 tendriamos :<br/>
     * <table>
     * <th colspan="0" rowspan="0" align="center" valign="middle" bgcolor="#C1B5B5">
     * <td>visible</td><td>Botones visibles</td>
     * </th>
     * <tr><td>2<td></td>bot???n nuevo</td></tr>
     * <tr><td>4<td></td>bot???n buscar</td></tr>
     * <tr><td>6<td></td>bot???n nuevo y bot???n buscar</td></tr>
     * </table>
     * <p>en general, los botones visibles se ubican como suma de sus c???digos,
     * existen sumas predefinidas en la clase CodigoBotones  del
     * paquete com.ig.comunes.constantes.CodigoBotones</p>
     *
     *
     * @param _visible
     */
    public void setVisible(int _visible) {
        visible = _visible;
        for(int z=0;z<botones.length;z++){
            botones[z].setVisible((botones[z].getCodigo() & visible)!=0);
        }
    }
    
    public void setVisibleBotoneImportacion(boolean b){
        botones[8].setVisible(b);
        botones[9].setVisible(b);
    }
    /*
     *
     *
     */
    public void adicionarBotones(){
        String[] imagesPaths= {"nuevo","buscar","editar","guardar","borrar","salir","imprimir","cancelar","importar","exportar" };
        String[] actionCommands={"nuevo","buscar","modificar","guardar","eliminar","salir","imprimir","cancelar","importar","exportar"};
        String[] toolTips={"Nuevo","Buscar","Modificar","Guardar","Eliminar","Salir","Imprimir","Cancelar","Importar","Exportar"};
        int[] codigoBotones={CodigoBotones.nuevo,CodigoBotones.buscar,CodigoBotones.modificar,CodigoBotones.guardar,CodigoBotones.eliminar,CodigoBotones.salir,CodigoBotones.imprimir,CodigoBotones.cancelar,-1,-1};
        
        for (int z=0;z<botones.length;z++){
            
            ImageIcon ic= new ImageIcon(getClass().getResource("/ig/util/images/"+imagesPaths[z]+".gif"));
            botones[z] = new BotonMenu(ic,actionCommands[z],toolTips[z]);
            botones[z].setCodigo(codigoBotones[z]);
            if(z== 8 || z==9 ){
                botones[z].setVisible(false);
            }
            if(z!=5){
                add(botones[z]);
            }
            
        }
        add(botones[5]);//adicionar salir al final        
    }
    /*
     * <p>retorna el boton del menu indicado por el parametro</p>
     *
     * @param nombre Nombre del Boton que se quiere obtener.
     * @return button boton buscado.
     */
    public BotonMenu getBoton(String nombre){
        BotonMenu button=null;
        
        if(nombre.equals("nuevo")){
            button = botones[0];//nuevo;
        }else if (nombre.equals("buscar")){
            button = botones[1];
        }else if (nombre.equals("modificar")){
            button = botones[2];//modificar;
        }else if (nombre.equals("guardar")){
            button = botones[3];//guardar;
        }else if (nombre.equals("eliminar")){
            button = botones[4];//eliminar;
        }else if (nombre.equals("salir")){
            button = botones[5];//salir;
        }else if (nombre.equals("imprimir")){
            button = botones[6];//imprimir;
        }else if (nombre.equals("cancelar")){
            button = botones[7];//cancelar;
        }else if (nombre.equals("importar")){
            button = botones[8];//imprimir;
        }else if (nombre.equals("exportar")){
            button = botones[9];//cancelar;
        }
        return button;
    }
    
}
